<?php
/**
 * Implementa��o do padr�o DAO para a classe ProcessosJuntados.
 * Essas fun��es n�o devem ser chamadas diretamente, sendo seu uso feito via a classe ProcessosJuntados.
*/
if( !function_exists('__autoload') )
{
    function __autoload($class_name) {
    require_once $class_name . '.php';
    }
}

class ProcessosJuntadosDAO
{
	private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function Cadastrar( $processosJuntados )
      {

      		$inicio = $this->database->Fetch("BEGIN");
      		if( $inicio )
      		{
      			$consulta = $this->database->Fetch("INSERT INTO t_compra_juncao(id) VALUES(NULL) ");

      			if( !$consulta )
      			{
      				$this->database->Fetch("ROLLBACK");
      				return FALSE;
      			}
      			else
      			{
      				$processoJuncaoId = DataAccess::getId();

      				for($i = 0; $i < count($processosJuntados->processos); $i++)
      				{
		      			$consulta = $this->database->Fetch("UPDATE t_compra SET t_compra_juncao_id = '$processoJuncaoId' WHERE id = '".$processosJuntados->processos[$i]->id."'");
		      			if( !$consulta )
		      			{
		      				$this->database->Fetch("ROLLBACK");
		      				return FALSE;
		      			}
		      		}	
      			}
      		}
      		$this->database->Fetch("COMMIT");
      		
      		return TRUE;
      }
      
	public function CarregarProcessosPorStatus( $servidor )
      {
      	$campusId = $servidor->obterCampus()->id;

      	switch( $servidor->perfil )
      	{
      		case 0:
      			$statusMin = 0;
      			$statusMax = 33;
      			break;
      		case 1:
      			$statusMin = 0;
      			$statusMax = 1;
      			break;
      		case 2:
      			$statusMin = 0;
      			$statusMax = 1;
      			break;
      		case 3:
      			$statusMin = 1;
      			$statusMax = 2;
      			break;
      		case 4:
      			$statusMin = 3;
      			$statusMax = 33;
      			break;
      		
      	}
			
			
		$consulta = $this->database->Fetch("SELECT c.*
											FROM t_compra c,
											t_usuario u, 
											t_setor s, 
											t_campus cp
											WHERE c.t_compra_juncao_id <> 0
											AND cp.id = $campusId
											AND s.t_campus_id = cp.id
											AND u.t_setor_id = s.id
											AND c.t_usuario_id = u.id
											AND c.status >= $statusMin
											AND c.status < $statusMax");
		
		if( $consulta and mysql_num_rows( $consulta ) > 0 )
		{
			$rows = $this->database->getRow();
			$p = ProcessosJuntados::ArrayParaObjetos( $rows );

			return $p;
		}
		else
			return false;
	}
       
	public function IncluirProcesso( $processoJuncaoId, $processoIndividual )
	{
		$consulta = $this->database->Fetch("UPDATE t_compra
											SET t_compra_juncao_id = $processoJuncaoId 
											WHERE id = $processoIndividual->id ");
		
		return $consulta;
	}
	
    public function CarregarProcessoJuntado( $processoJuncaoId, $servidor )
	{
		$unidadeId = $servidor->obterCampus()->id;
		//var_dump($unidadeId);
		//exit;
		switch( $servidor->perfil )
      	{
      		case 0:
      			$statusMin = 0;
      			$statusMax = 33;
      			break;
      		case 1:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 2:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 3:
      			$statusMin = 1;
      			$statusMax = 1;
      			break;
      		case 4:
      			$statusMin = 3;
      			$statusMax = 33;
      			break;
      		
      	}
		
		
		$consulta = $this->database->Fetch("SELECT c.*, 
											cj.id as compra_juncao_id
                                               FROM t_compra c, 
                                               t_usuario u, 
                                               t_setor s, 
                                               t_campus cp, 
                                               t_compra_juncao cj
                                               WHERE cp.id = $unidadeId
                                               AND cj.id = $processoJuncaoId
                                               AND c.t_compra_juncao_id = cj.id
                                               AND s.t_campus_id = cp.id
                                               AND u.t_setor_id = s.id
                                               AND c.t_usuario_id = u.id
											   AND c.status >= $statusMin
											   AND c.status < $statusMax
                                               ");

		/// detalhamento vai receber um array 
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
		{

			$rows = $this->database->getRow();
			$processosJuntados = new ProcessosJuntados();
			$processosJuntados->processos = Processo::ArrayParaObjetos( $rows );

			$processosJuntados->OrganizarDetalhamento();
			$processosJuntados->id = $rows[0]['compra_juncao_id'];

			return $processosJuntados;
		}
		else
		{
			return false;
		}
	}
	
	public function CarregarProcessosPorCategoria( $categoriaId, $servidor )
	{
		$unidadeId = $servidor->ObterCampus()->id;
		
		switch( $servidor->perfil )
      	{
      		case 0:
      			$statusMin = 0;
      			$statusMax = 33;
      			break;
      		case 1:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 2:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 3:
      			$statusMin = 1;
      			$statusMax = 1;
      			break;
      		case 4:
      			$statusMin = 3;
      			$statusMax = 33;
      			break;
      		
      	}
		
		$consulta = $this->database->Fetch("SELECT DISTINCT c.*
												FROM t_compra c, 
												t_itens_detalhamento id, 
												t_material_unidade mu, 
												t_material m, 
												t_categoria ct, 
												t_usuario u, 
												t_setor s, 
												t_campus cp
												WHERE id.t_compra_id = c.id
												AND mu.id = id.t_material_unidade_id
												AND m.id = mu.t_material_id
												AND ct.id = m.t_categoria_id
												AND ct.id = $categoriaId
												AND c.status >= $statusMin
												  AND c.status <= $statusMax
												AND cp.id = $unidadeId
												AND s.t_campus_id = cp.id
												AND u.t_setor_id = s.id
												AND c.t_compra_juncao_id IS NOT NULL
												ORDER BY id");
		if( $consulta  and mysql_num_rows( $consulta ) > 0 )
		{
			$rows = $this->database->getRow();
			$processos = ProcessosJuntados::ArrayParaObjetos( $rows );
			return $processos;
		}
		else
			return FALSE;
	}
	
	public function CarregarProcessosPorEspecificacao( $especificacao, $servidor )
	{
		$unidadeId = $servidor->ObterCampus()->id;
	
		switch( $servidor->perfil )
      	{
      		case 0:
      			$statusMin = 0;
      			$statusMax = 33;
      			break;
      		case 1:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 2:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 3:
      			$statusMin = 1;
      			$statusMax = 1;
      			break;
      		case 4:
      			$statusMin = 3;
      			$statusMax = 33;
      			break;
      		
      	}
      		
		if( $especificacao == 1 )
				$consulta = $this->database->Fetch("SELECT DISTINCT c.* 
	  												FROM t_compra c, 
	  												t_itens_detalhamento id, 
	  												t_usuario u, 
													t_setor s, 
													t_campus cp
	  												WHERE id.t_compra_id = c.id
	  												AND id.t_material_unidade_id <> 0
	  												AND c.status >= $statusMin
	  												AND c.status <= $statusMax
													AND cp.id = $unidadeId
													AND s.t_campus_id = cp.id
													AND u.t_setor_id = s.id
													AND c.t_usuario_id = u.id
													AND c.t_compra_juncao_id IS NOT NULL
													ORDER BY ID");
		else if( $especificacao == 2 ) // consulta apenas por processos que contenham apenas servi�os
			$consulta = $this->database->Fetch("SELECT DISTINCT c.* 
  												FROM t_compra c, 
  												t_itens_detalhamento id, 
  												t_usuario u, 
												t_setor s, 
												t_campus cp
  												WHERE id.t_compra_id = c.id
  												AND id.t_servico_id <> 0
  												AND c.status >= $statusMin
  												AND c.status <= $statusMax
												AND cp.id = $unidadeId
												AND s.t_campus_id = cp.id
												AND u.t_setor_id = s.id
												AND c.t_usuario_id = u.id
												AND c.t_compra_juncao_id IS NOT NULL
												ORDER BY ID");
  				
		if( $consulta  and mysql_num_rows( $consulta ) > 0 )
		{
		 	$rows = $this->database->getRow();
			$processos = ProcessosJuntados::ArrayParaObjetos( $rows );
			return $processos;
		}
		else
			return FALSE;
	}
	
	public function CarregarProcessosPorServico( $servicoId, $servidor )
	{
		$unidadeId = $servidor->ObterCampus()->id;
      		
		switch( $servidor->perfil )
      	{
      		case 0:
      			$statusMin = 0;
      			$statusMax = 33;
      			break;
      		case 1:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 2:
      			$statusMin = 0;
      			$statusMax = 0;
      			break;
      		case 3:
      			$statusMin = 1;
      			$statusMax = 1;
      			break;
      		case 4:
      			$statusMin = 3;
      			$statusMax = 33;
      			break;
      		
      	}
		
		$consulta = $this->database->Fetch("SELECT DISTINCT c.* 
												FROM t_compra c, 
												t_itens_detalhamento id, 
												t_servico sv,
												t_usuario u, 
												t_setor s, 
												t_campus cp
												WHERE c.id = id.t_compra_id
												AND id.t_material_unidade_id = 0 
												AND sv.id = $servicoId 
												AND c.status >= $statusMin
												AND c.status <= $statusMax
												AND cp.id = $unidadeId
												AND s.t_campus_id = cp.id
												AND u.t_setor_id = s.id
												AND c.t_usuario_id = u.id
												AND c.t_compra_juncao_id IS NOT NULL
												ORDER BY id");

		if( $consulta and mysql_num_rows( $consulta ) > 0 )
		{
			$rows = $this->database->getRow();
			$processos = ProcessosJuntados::ArrayParaObjetos( $rows );

			return $processos;
		}
		else
			return FALSE;
	}
	
}
?>